package com.cnap.service;

import com.cnap.model.intelligent.IntelligentClusterInfo;
import com.cnap.model.intelligent.IntelligentHistoryVO;
import com.cnap.model.intelligent.UpdateIntelligentDTO;
import com.cnap.model.schedule.engine.DeployPolicyCalcResV2;

import java.util.List;

/**
 * 智能调度周期任务服务类
 *
 * @author xc
 **/
public interface IntelligentScheduleService {

    /*
     * 1、下发部署微服务时添加任务
     * 2、微服务部署成功后启用任务
     * 3、周期执行
     * 4、满足条件后先执行部署，再执行删除
     *
     */


    /**
     * 更新最新的建议集群信息
     *
     * @param svcId   微服务id
     * @param suggest 建议集群
     */
    void updateNewSuggestCluster(String svcId, List<IntelligentClusterInfo> suggest);

    /**
     * 添加智能调度任务
     *
     * @param svcId    微服务id
     * @param duration 周期
     * @param active   0：false，1：true
     */
    void addNewIntelligentSchedule(String svcId, int duration, int active);


    /**
     * 更新智能调度策略
     *
     * @param updateIntelligentDTO 参数
     */
    void updateIntelligent(UpdateIntelligentDTO updateIntelligentDTO);

    /**
     * 根据微服务id查询历史记录
     *
     * @param svcId 微服务id
     * @return 结果
     */
    List<IntelligentHistoryVO> getHistoryVOBySvcId(String svcId);

    /**
     * 根据id删除历史记录
     *
     * @param id id
     */
    void deleteHistoryById(String id);

    /**
     * 保存智能调度策略结果
     *
     * @param svcId        微服务id
     * @param currentInfos 当前部署集群信息
     * @param suggestInfos 优化建议集群信息
     * @param needMigrate  需要迁移：true，不需要迁移：false
     * @param deployRes    算法计算响应
     */
    void saveIntelligentHistory(String svcId, List<IntelligentClusterInfo> currentInfos,
                                List<IntelligentClusterInfo> suggestInfos, boolean needMigrate, DeployPolicyCalcResV2 deployRes);

    /**
     * 根据微服务id删除
     *
     * @param svcId 微服务id
     */
    void deleteIntelligentInfoBySvcId(String svcId);

}
